package com.ttsx.service.impl;

import cn.hutool.core.util.RandomUtil;
import com.ttsx.core.common.exception.TTSXException;
import com.ttsx.core.common.result.ResultCodeEnum;
import com.ttsx.core.storage.service.StorageService;
import com.ttsx.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author wb
 */
@Service
public class FileServiceImpl implements FileService {

    @Autowired
    private StorageService storageService;

    @Override
    public String upload(MultipartFile multipartFile) {
        try {
            // 获取文件名
            String filename = getFileName(multipartFile.getOriginalFilename());

            // 获取文件大小
            long size = multipartFile.getSize();

            // 判断文件大小
            if(size > 1024 * 1024 * 10){
                throw new TTSXException(ResultCodeEnum.FILE_TOO_LARGE);
            }

            // 上传文件
            return storageService.upload(multipartFile.getBytes(), filename, multipartFile.getContentType());
        } catch (Exception e) {
            throw new TTSXException(ResultCodeEnum.FILE_UPLOAD_ERROR);
        }
    }

    @Override
    public void download(String filePath) {
        // TODO 文件下载
    }


    /**
     * 传入文件名返回新的文件名
     *
     * @param fileName 文件名
     * @return 新的文件名
     */
    public static String getFileName(String fileName) {
        if (fileName == null) {
            throw new TTSXException(ResultCodeEnum.FILE_NOT_FIND);
        }

        // 获取当前时间戳
        long currentTime = System.currentTimeMillis();

        // 生成随机数
        String randomNumber = RandomUtil.randomNumbers(5);

        // 获取文件后缀
        String suffix = fileName.substring(fileName.lastIndexOf("."));

        // 返回新的文件名
        return currentTime + randomNumber + suffix;
    }
}
